<!DOCTYPE html>
<html lang='en'>
<head>
    <meta charset='UTF-8'>
     <meta name='viewport' content='width=device-width, initial-scale=1.0'>
     <title>数组方法slice</title>
     <link rel='stylesheet' href='//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/styles/default.min.css'>
     <script src='//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js'></script>
</head>
<body>
     <pre>
        <code style='max-height: 400px;'>
            /**
                * 不会改变原来的数组
                * slice(n,m) 方法 ==> 从索引为n的地方 ==> 索引为m的地方 不包含索引 返回的是接取的部分  不改变原来的数组
                * 
            */
            let arr = [1,2,3,4,5,6]
            let _Arr = arr.slice(1,3)
            console.log('原来的arr',arr);
            console.log('arr.slice(1,3),slice从索引为1到所以为3的地方 不包含索引为3',arr.slice(1,3)); // [1,4,5,6]
            console.log('使用slice截取的arr',arr);

            console.log('splice(0)',arr.slice(0));

        // 使用slice完成数组的克隆 --浅克隆
        let _arr = arr.slice(0)
        console.log('arr',arr,'_arr',_arr);
        arr[0] = 10000
        console.log('arr',arr,'_arr',_arr);


        /**
         * 思考？
         * 1、如果当n | m 为负数会怎么？
         * 2、如果 n > m 会怎么 ？
         * 3、如果是小数会怎么？
         * 4、如果是非有效数字？
         * 5、如果m或者n大于最大索引值？
         * 
        */

        let __arr = [1,2,3,4,5,6]
        // 当 n > m 的情况
        console.log('当n > m的情况(4,1)',__arr.slice(4,1)); // 返回空数组
        // 当有n是负数
        console.log('如果当 n 为负数',__arr.slice(-1,4)); // 空数组
        // 当m是一个负数
        console.log('如果当 m 是负数',__arr.slice(1,-2)); // [2,3,4] -1从数组的末尾开始计算
        // 非有效数字
        console.log('非有效数字',__arr.slice(1,'4px')); // []
        // 小数 向下取整数
        console.log('小数',__arr.slice(1.1,3.2)); // [2,3]
        // m、或者n大于最大索引值
        console.log('n大于最大索引值',_arr.slice(10,1));  // []
        // 将开始索引后面的全部截取
        console.log('m大于索引值',__arr.slice(4,20)); // [5,6]
        
        </code>
     </pre>
     <script> hljs.highlightAll(); </script>
     <script>
        /**
         * 不会改变原来的数组
         * slice(n,m) 方法 ==> 从索引为n的地方 ==> 索引为m的地方 不包含索引 返回的是接取的部分  不改变原来的数组
         * m不写是找到末尾
        */
        let arr = [1,2,3,4,5,6]
        let _Arr = arr.slice(1,3)
        console.log('原来的arr',arr);
        console.log('arr.slice(1,3),slice从索引为1到所以为3的地方 不包含索引为3',arr.slice(1,3)); // [1,4,5,6]
        console.log('使用slice截取的arr',arr);

        console.log('splice(0)',arr.slice(0));

        // 使用slice完成数组的克隆 --深度克隆
        let _arr = arr.slice(0)
        console.log('arr',arr,'_arr',_arr);
        arr[0] = 10000
        console.log('arr',arr,'_arr',_arr);


        /**
         * 思考？
         * 1、如果当n | m 为负数会怎么？
         * 2、如果 n > m 会怎么 ？
         * 3、如果是小数会怎么？
         * 4、如果是非有效数字？
         * 5、如果m或者n大于最大索引值？
         * 
        */

        let __arr = [1,2,3,4,5,6]
        // 当 n > m 的情况
        console.log('当n > m的情况(4,1)',__arr.slice(4,1)); // 返回空数组
        // 当有n是负数
        console.log('如果当 n 为负数',__arr.slice(-1,4)); // 空数组
        // 当m是一个负数
        console.log('如果当 m 是负数',__arr.slice(1,-2)); // [2,3,4] -1从数组的末尾开始计算
        // 非有效数字
        console.log('非有效数字',__arr.slice(1,'4px')); // []
        // 小数 向下取整数
        console.log('小数',__arr.slice(1.1,3.2)); // [2,3]
        // m、或者n大于最大索引值
        console.log('n大于最大索引值',_arr.slice(10,1));  // []
        // 将开始索引后面的全部截取
        console.log('m大于索引值',__arr.slice(4,20)); // [5,6]

     </script>
</body>
</html>